public void levelUp()
    {
        // level up with 8 exp pts, plus 2 for each additional level
        // ie. it gets harder to level up
        if(exp == 6 + (2 * levelFactor))
        {
            level++; 
            exp = 0;
            // decides wether or not to increase speed - FIX!
            if(level == 4)
                speed++;
            else if(level == 8)
                speed++; 
            else if(level == 12)
                speed++;
            levelFactor++;
        }
    }

    public void addExp(Fish deadFish)
    {  
        if((deadFish.getClass()).equals(
                new Fish(deadFish.environment(), deadFish.location()))) 
                    { exp += 2; }
        else if((deadFish.getClass()).equals(
                new NoobFish(deadFish.environment(), deadFish.location()))) 
                    { exp += 0; }
        else if((deadFish.getClass()).equals(
                new InfertileFish(deadFish.environment(), deadFish.location()))) 
                    { exp += 1; }
        else if((deadFish.getClass()).equals(
                new RPGFish(deadFish.environment(), deadFish.location())))
                    { exp += 4; }
    levelUp();
    }   

    public void killFish()
    { 
        Fish tempFish;
        Location inFront = environment().getNeighbor(location(), direction());
        if(!(environment().isEmpty(inFront)) && environment().isValid(inFront))
        {
            tempFish = (Fish)environment().objectAt(inFront);
            if(!(tempFish.level() > this.level() + strength))
            {
                ((Fish)environment().objectAt(inFront)).die();
                addExp(tempFish);
                System.out.println(this.ident() + " ate " + tempFish.ident() + "   " + this.ident() + " lv: " + level + " exp: " + totalExp);
            }
        }
    }
    
    public void dissapear()
    {
        environment().remove(this);
        isInvisible = true;
    }
    
    public void reappear()
    {
        environment().add(this);
        isInvisible = false;
    }
    
    /* breeding disabled - largely because young
     * Fish would be at a severe disadvantage to higher level Fish
     */
    public void act()
    {
        // Make sure fish is alive and well in the environment -- fish
        // that have been removed from the environment shouldn't act.
        if ( !(isInEnv()) && !(isInvisible))
            return;

        for(int i = 0; i < speed; i++)
        {
            move();
            killFish();
        }
    }
    /* no comment */